package com.zpark.service.impl;

import com.zpark.exception.*;
import com.zpark.mapper.IPersonMapper;
import com.zpark.pojo.Person;
import com.zpark.service.IPersonService;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @PackageName: com.zpark.service.impl
 * @ClassName: PersonServiceImpl
 * @Description:
 * @author: RZS
 * @date: 2024/3/14  17:53
 */
@Service
public class PersonServiceImpl implements IPersonService {

    // 自动注入持久层对象
    @Autowired
    private IPersonMapper personMapper;

    @Override
    public List<Person> findAll() throws FindAllPersonNullException {
        // 1、调用持久层方法查询数据
        List<Person> persons = personMapper.selectAll();
        // 2、判断查询结果是否为null（判断list的size是否不为0）
        if (persons.size() == 0) {
            // 如果结果为空，则抛出异常
            throw new FindAllPersonNullException("查询用户所有数据失败，没有用户数据");
        }
        // 否则返回数据
        return persons;
    }

    @Override
    public Person findByUsername(String name) throws UsernameNotFindException {
        // 1、判断参数name是否为空  name = null, name = ""
        System.out.println(name);
        boolean empty = StringUtils.isEmpty(name);
        System.out.println(empty);
        // 2、如果name为空则抛出异常
        if (empty) {
            throw new UsernameNotFindException("用户不存在异常");
        }
        // 3、如果name不为空，则调用持久层接口查询数据
        Person person = personMapper.selectByUsername(name);
        // 4、判断查询结果是否为空，如果为空，则抛出异常
        if (person == null) {
            throw new UsernameNotFindException("用户不存在异常");
        }
        // 5、结果不为空，返回数据
        return person;
    }

    @Override
    public void removeById(Integer id) throws RemoveByIdPersonException {
        // 1、调用持久层接口删除数据
        Integer row = personMapper.deleteById(id);
        // 2、判断持久层方法返回结果是否为0
        if (row <= 0) {
            // 3、如果为0，则抛出异常
            throw new RemoveByIdPersonException("根据用户id删除数据失败");
        }
    }

    @Override
    public void changeById(String uname, String pwd, Integer id) throws UpdateByIdPersonException, UsernameOrPasswordIsNullException {
        // 1、判断参数name和密码是否为空  name = null, name = ""
        boolean result = StringUtils.isEmpty(uname) || StringUtils.isEmpty(pwd);
        // 2、如果name或者密码为空则抛出异常
        if (result) {
            throw new UsernameOrPasswordIsNullException("用户名或者密码未空异常");
        }
        // 3、如果name和密码不为空，则调用持久层接口修改数据
        Integer row = personMapper.updateById(id, uname, pwd);
        // 4、判断持久层方法返回结果是否为0
        if (row <= 0) {
            // 5、结果为0，抛出异常
            throw new UpdateByIdPersonException("根据用户id修改用户数据失败");
        }
    }
}
